# -*- coding: utf-8 -*-

import sys
import os
#读取excel
import xlrd
#写入excel
import xlwt
#操作excel 的实用工具
from xlutils.copy import copy
#oracl模块
import cx_Oracle as oracle
#时间模块
import datetime

'''
项目需求：
1、统计Oracle中的数据，将查询的数据导入excel表格中；
2、取两个值：最新时间，昨日的数据量；
'''


#解决编码问题:界面到数据库
os.environ["NLS_LANG"] = ".AL32UTF8"

#获取当前时间（年-月-日）
now_time = datetime.datetime.now().strftime('%Y%m%d')

#连接数据库地址
oracl_url = "root_db/passwd@192.168.1.100/oracl_db"

#输入文件名称
file_in_path = "test-templates.xls"

#输出文件名称
file_out_path = "test"+ now_time + ".xls"

#开始时间--昨天时间 0时
start_time = "\'" + (datetime.datetime.now() + datetime.timedelta(day=-1)).strftime('%Y%m%d') + "000000\'"

#结束时间--今日时间 0时
end_time = "\'" + now_time + "000000\'"

#excel的sheet表名
sheet_name = "Sheet1"


#连接数据库
db = oacle.connect(oracl_url)

#创建cursor
cursor = db.cursor()

#打开工作本 
oldWb = xlrd.open_workbook(file_in_path,formatting_info=True)

#复制
newWb = copy(oldWb)

#取sheet表
newWs = newWb.get_sheet(sheet_name)

#获取数据库数据
def exec_sql(sql):
    return cursor.execute(sql).fetchall()

#将取得的数据插入表格（表格位置下标index-1）
def insert_excel(value, row, col):
     newWs.write(row,col,value)

###############################1##########################
#查询的脚本,查询最新的时间
sql = '''
select to_char(etlendtime,'yyyymmddhh24miss') from
(
    select * from etl_log t where t.tablename='T_TABLE_TEST' order by t.etlendtime des

) where rownum =1
'''

#查询某个时间段 值的 总和
sql_sum = '''
select sum(insertnum) from etl_log a where a.tablename='T_TABLE_TEST' and to_char(etlendtime,'yyyymmddhh24miss') >={0}
and to_char('yyyymmddhh24miss') < {1}
'''.format(start_time, end_time)

# 调取函数，获取数据库的值
value = exec_sql(sql)
sum_value = exec_sql(sql_sum)

#判断获取的sum_value值是否为空或者为0;sum_value[0][0]--取第一行第一列的值
if (sum_value[0][0] is not None and sum_value[0][0] > 0 ):
    #插入sheet1表格中--值，行，列
    insert_excel(sum_value[0][0],154,4)
else:
    #如果为零或者为空，则使用此sql
    sql_sum = '''
    select sum(mergenum) from etl_log a where a.tablename='T_TABLE_TEST' and to_char(etlendtime,'yyyymmddhh24miss') >={0}
    and to_char('yyyymmddhh24miss') < {1}
    '''.format(start_time, end_time)
    
    #查询数据，并返回查询结果
    sum_value = exec_sql(sql_sum)
    #插入表格
    insert_excel(sum_value[0][0],154,4)

#插入最新时间
insert_excel(value[0][0],154,2)



##################################2#############################
#查询的脚本,查询最新的时间
sql = "select max(t.endtime) from T_TABLE_TEST2"

#查询某个时间段 值的 总和
sql_sum = "select count(1) from T_TABLE_TEST2 t where t.etldate>=" + start_time + "and t.etldate <" + end_time + ""

# 调取函数，获取数据库的值
value = exec_sql(sql)
sum_value = exec_sql(sql_sum)

#插入最新时间
insert_excel(value[0][0],155,2)

#插入值的总和
insert_excel(sum_value[0][0],155,4)



print("inset into success!")

#关闭数据库连接
db.close()

#保存文件
newWb.save(file_out_path)





